export type ValidatorFactoryOptions = {
  label: string // 表单名
  reg?: RegExp // 验证正则
  require?: boolean // 是否必填
  valueMaxLength?: number // 最大长度
  valueMinLength?: number // 最小长度
  validateFailMsg?: string // 正则验证失败后错误提示
}
/**
 * 验证工厂
 * @param ValidatorFactoryOptions 工厂配置
 * @returns
 */
export function validatorFactory({
  label,
  reg,
  require = true,
  valueMaxLength,
  valueMinLength,
  validateFailMsg
}: ValidatorFactoryOptions) {
  return (_, value: string = '') => {
    if (require && !value) {
      return new Error('请输入' + label)
    }

    if (reg && value && !reg.test(value)) {
      const errorMsg = validateFailMsg || '请输入正确的' + label
      return new Error(errorMsg)
    }

    if (
      (valueMaxLength && value.length > valueMaxLength) ||
      (valueMinLength && value.length < valueMinLength)
    ) {
      return new Error(
        `${label}长度必须介于 ${valueMinLength} 和 ${valueMaxLength} 之间`
      )
    }

    if (valueMinLength && value.length < valueMinLength) {
      return new Error(`${label}长度必须不小于${valueMinLength}`)
    }

    if (valueMaxLength && value.length > valueMaxLength) {
      return new Error(`${label}长度必须不大于${valueMaxLength}`)
    }

    return true
  }
}
